package com.linc.Properties;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import com.android.widget.demo.R;

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.lang.reflect.Method;

public class PropertiesActivity extends AppCompatActivity {
    private TextView mTvInfo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_properties);
        mTvInfo = (TextView)findViewById(R.id.tv_info);
        showInfo();
    }

    private void showInfo() {
        mTvInfo.setText("CPU ID: "+getCPUSerial());

        //other method
        String []propertys = {"ro.boot.serialno", "ro.serialno"};
        for (String key : propertys){
            String v = getAndroidOsSystemProperties(key);
            Log.e("", "get " + key + " : " + v);
            mTvInfo.append("\n"+key+": "+v);
        }
    }

    private String getCPUSerial() {
        String str = "", strCPU = "", cpuAddress = "0000000000000000";
        try {
            //读取CPU信息
            Process pp = Runtime.getRuntime().exec("cat /proc/cpuinfo");
            InputStreamReader ir = new InputStreamReader(pp.getInputStream());
            LineNumberReader input = new LineNumberReader(ir);
            //查找CPU序列号
            for (int i = 1; i < 100; i++) {
                str = input.readLine();
                if (str != null) {
                    //查找到序列号所在行
                    if (str.indexOf("Serial") > -1) {
                        //提取序列号
                        strCPU = str.substring(str.indexOf(":")
                                        + 1,str.length());
                        //去空格
                        cpuAddress = strCPU.trim();
                        break;
                    }
                }else{
                    //文件结尾
                    break;
                }
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return cpuAddress;
    }

    static Method systemProperties_get = null;
    static String getAndroidOsSystemProperties(String key) {
        String ret = null;
        try {
            systemProperties_get = Class.forName("android.os.SystemProperties").getMethod("get", String.class);
            ret = (String) systemProperties_get.invoke(null, key);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ret;
    }
}
